/******************************************************************************

	COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2008, 2009, 2010.

	This file is part of Maxsi Engine.

	Maxsi Engine is free software: you can redistribute it and/or modify it
	under the terms of the GNU Lesser General Public License as published by
	the Free Software Foundation, either version 3 of the License, or (at your
	option) any later version.

	Maxsi Engine is distributed in the hope that it will be useful, but WITHOUT
	ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
	FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
	for more details.

	You should have received a copy of the GNU Lesser General Public License
	along with Maxsi Engine. If not, see <http://www.gnu.org/licenses/>.

	MaxsiEngine.dll
	A general purpose C++ library for the Maxsi Technology Project.

	MaxsiEngine.h
	Import header for the entire Maxsi Engine.

******************************************************************************/

#ifndef MaxsiEngine_H
#define MaxsiEngine_H

//=============================================================================
//	Enable this for unofficial beta releases, don't enable this for official
//	releases. This enables beta features that shouldn't go into release builds
//	but should only be present in development builds, because these features
//	are currently unstable, are buggy or don't compile. 
//=============================================================================
#define Maxsi_Beta

//=============================================================================
//	Enable this for unofficial development builds in release mode. This
//	surpresses a series of warnings/errors that normally appear only in release
//	builds. These warnings/errors are places so that they should be addressed
//	before the next actual release build. Only enable this if the release build
//	isn't final and you want to compile it without these errors. If the errors
//	you get aren't important to fix before the next release, go ahead and
//	replace them with HACK:, TODO:, or FIXME: comment blocks instead.
//=============================================================================
#define DEBUG_RELEASE_BUILD // Deprecated by Maxsi_Ignore_Bugs
#define Maxsi_Ignore_Bugs

//=============================================================================
//	Standard Include Headers.
//=============================================================================
#define _LARGE_FILE_API
#define _LARGEFILE64_SOURCE
#define __STDC_LIMIT_MACROS // Needed for INTNN_MAX macros in <stdint.h>
#include <stdio.h>
#include <limits.h>
#include <malloc.h>
#include <string.h>
#include <wchar.h>
#include <errno.h>
#include <new>

//=============================================================================
//	Windows Header Defines.
//=============================================================================
#ifdef WIN32
#if _WIN32_WINNT < 0x0600
#undef _WIN32_WINNT
#define _WIN32_WINNT	0x0600
#endif
#if _WIN32_IE < 0x0501
#undef _WIN32_IE
#define _WIN32_IE		0x0501	// Required by commctrl.h (MingW 64)/InitCommonControlsEx()/PBM_SETBARCOLOR
#endif
#include <winsock2.h>
#include <windows.h>
#endif

//=============================================================================
//	Linux Header Defines.
//=============================================================================
#ifdef linux
#include <stdlib.h>
#include <stdint.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <inttypes.h>
#include <limits.h>
#include <fcntl.h>
#include <unistd.h>
#endif

#ifdef __MINGW64__
#include <stdint.h>
#endif

//=============================================================================
//	glibc Header Defines. (included by limits.h, please remove)
//=============================================================================
//#ifdef __GNUC__
//#include <features.h>
//#endif

//=============================================================================
//	Maxsi Engine Core.
//=============================================================================
#include "MaxsiDefines.h"
#include "MaxsiMacros.h"
#include "MaxsiStdInt.h"
#include "MaxsiEngineDLL.h"
#include "MaxsiTypes.h"
#include "MaxsiError.h"

//=============================================================================
//	C Runtime extensions for MinGW.
//=============================================================================
#include "MaxsiCRuntime.h"
#include "MaxsiMinGWHacks.h"

//=============================================================================
//	zlib.
//=============================================================================
#include "zlib.h"

//=============================================================================
//	Secure Hash Algorithm (SHA-1) from CSHA1 - A C++ class implementation of
//	the SHA-1 hash algorithm by Dominik Reichl. Thanks!
//=============================================================================
#include "SHA1.h"

//=============================================================================
//	Maxsi Engine.
//=============================================================================
#include "MaxsiString.h"
#include "MaxsiInteger.h"
#include "MaxsiTime.h"
#include "MaxsiComplex.h"
#include "MaxsiList.h"
#include "MaxsiArray.h"
#include "MaxsiSHA.h"
#include "MaxsiRegression.h"
#include "MaxsiTranslate.h"
#include "MaxsiDataContainer.h"
#include "MaxsiFileSystem.h" 
#include "MaxsiThread.h"
#include "MaxsiBuffer.h"
#include "MaxsiInstallScript.h"
#include "MaxsiNetworking.h"
#if 0 // Files that are not yet cross platform.
#include "MaxsiEngineFile.h"
#include "MaxsiFileFormat.h"
#include "MaxsiCommand.h"
#endif
#ifdef Maxsi_Support_W32
#include "MaxsiWin7TaskBar.h" // Should be integrated into the Maxsi Window System as an optional component.
#endif
#if 0 // Files only relevant on Windows.
#include "MaxsiComDlg.h" // Should be integrated into the Maxsi Window System.
#include "MaxsiWin32.h" // In part replaced by the Maxsi Window System, the Maxsi Thread System, and others.
#include "MaxsiArguments.h" // Deprecated.
#endif
#include "MaxsiThinks.h"
#include "MaxsiWorker.h"

//=============================================================================
//	Maxsi IO.
//=============================================================================
#include "MaxsiIO.h"
#include "MaxsiIODeviceEpoll.h"
#include "MaxsiIODeviceStdOut.h"
#include "MaxsiIOBin2Hex.h"
#if 0 // Files that have not yet been ported to Linux.
#include "MaxsiIOFileSystem.h"
#include "MaxsiServer.h" // Deprecated when MaxsiIO goes live.
#endif

//=============================================================================
//	If defined in MaxsiDefines.h, use our namespaces by default!
//=============================================================================
#ifndef Maxsi_Disable_Auto_Using_Namespace
UsingMaxsiNamespace
#endif

//=============================================================================
//	Maxsi UI.
//=============================================================================
#if 0 && defined(WIN32) && !defined(Maxsi_Using_GTK)
#include "MaxsiUI.h"
#endif

//=============================================================================
//	Maxsi Window System and various implementations of it on various platforms.
//=============================================================================
#include "MaxsiWindowSystem.h"
#ifdef Maxsi_Support_GTK
#include "MaxsiWindowGTK.h"
#endif
#ifdef Maxsi_Support_W32
#include "MaxsiWindowW32.h"
#endif
#include "MaxsiWindowControls.h"

//=============================================================================
//	That's it! Your code below can now use the entire Maxsi Engine!
//=============================================================================

#endif
